﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Seg.Entidades;

namespace Seg.Datos
{
    public class UsuarioDatos
    {
        BD_SEGEntities context = new BD_SEGEntities();

        public List<Usuario> Listar() { 
            return context.Usuario.ToList();
        }

        public List<Usuario> ListarUsuarios(string Nombre, decimal CodigoOficina, string anulado)
        {
            var datos = new List<Seg.Entidades.Usuario>();

            if (anulado == "0")
            {
                datos = context.Usuario.Where(x =>
                    ((x.Nombre.Contains(Nombre) || x.Paterno.Contains(Nombre) || x.Materno.Contains(Nombre) || Nombre == ""))
                ).ToList();
            }
            else
            {
                var anul = anulado == "A" ? false : true;
                datos = context.Usuario.Where(x =>
                    ((x.Nombre.Contains(Nombre) || x.Paterno.Contains(Nombre) || x.Materno.Contains(Nombre) || Nombre == "")
                    && (x.Anulado == anul))
                ).ToList();

            }
            return datos;
        }
        
        public int Insertar(Usuario entidad)
        {
            entidad.CodigoUsuario = GenerarCodigo();
            context.Usuario.Add(entidad);
            context.SaveChanges();
            return 1;
        }
        public int Actualizar(Usuario entidad)
        {
            var objUpd = context.Usuario.Where(x => x.CodigoUsuario == entidad.CodigoUsuario).FirstOrDefault();
            objUpd.Nombre = entidad.Nombre;
            objUpd.Materno = entidad.Materno;
            objUpd.Paterno = entidad.Paterno;
            objUpd.CodigoParamDocumento = entidad.CodigoParamDocumento;
            objUpd.NumeroDocumento = entidad.NumeroDocumento;
            objUpd.UsuarioWindow = entidad.UsuarioWindow;
            objUpd.DominioWindow = entidad.DominioWindow;
            objUpd.CorreoElectronico = entidad.CorreoElectronico;
            objUpd.Anulado = entidad.Anulado;
            objUpd.Clave = entidad.Clave;

            context.SaveChanges();
            return 1;
        }
        public Usuario ObtenerUsuario(decimal CodigoUsuario)
        {
            var datos = new Seg.Entidades.Usuario();
            datos = context.Usuario.Where(x =>
                (x.CodigoUsuario == CodigoUsuario)
            ).Single();
            return datos;
        }
        public int Eliminar(int id)
        {
            var objUpd = context.Usuario.Where(x => x.CodigoUsuario == id).FirstOrDefault();
            objUpd.Anulado = true;
            var r = context.SaveChanges();
            return r;
        }
        public int validarNumeroDocumento(Usuario entidad)
        {
            var c = context.Usuario.Where(x =>
                (x.CodigoParamDocumento == entidad.CodigoParamDocumento
                && x.NumeroDocumento == entidad.NumeroDocumento)).Count();
            return c;
        }
        public int validarNumeroDocumentoEditar(Usuario entidad)
        {
            var obj = context.Usuario.Where(x =>
                (x.CodigoUsuario == entidad.CodigoUsuario)).FirstOrDefault();

            var c = 0;
            if (obj != null && obj.CodigoParamDocumento == entidad.CodigoParamDocumento && obj.NumeroDocumento != entidad.NumeroDocumento)
            {
                c = context.Usuario.Where(x =>
                (x.CodigoParamDocumento == entidad.CodigoParamDocumento
                && x.NumeroDocumento == entidad.NumeroDocumento)).Count();
            }
            return c;
        }
        public int validarUsuarioEditar(Usuario entidad)
        {
            var obj = context.Usuario.Where(x =>
                (x.CodigoUsuario == entidad.CodigoUsuario)).FirstOrDefault();

            var c = 0;
            if (obj != null && obj.UsuarioWindow != entidad.UsuarioWindow)
            {
                c = context.Usuario.Where(x =>
                    (x.UsuarioWindow == entidad.UsuarioWindow)).Count();
            }
            return c;
        }
        public int validarUsuario(Usuario entidad)
        {
            var c = context.Usuario.Where(x => x.UsuarioWindow == entidad.UsuarioWindow).Count();
            return c;
        }
        int GenerarCodigo()
        {
            var actual = context.Usuario.Max(x => x.CodigoUsuario);
            return actual + 1;
        }
        public List<Usuario> UsuarioAutoCompletado(string descripcion)
        {
            var datos = new List<Seg.Entidades.Usuario>();
            datos = context.Usuario.Where(x =>
                ((x.Nombre.Contains(descripcion) || x.Paterno.Contains(descripcion) || x.Materno.Contains(descripcion))
                && (x.Anulado == false))
                ).ToList();
            return datos;
        }
    }
}
